package framework.portals;

import java.util.ArrayList;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import framework.BaseFormExtended;
import framework.BaseFormExtended.Portal;
import framework.advs.BaseAdvertisment;
import webdriver.BaseForm;
import webdriver.CommonFunctions;

/**
 * Базовый класс для портала NeagentBy
 */
public class NeagentBy extends BaseFormExtended{

	private String advTemplate = "//div[@id='content']//div[contains(@class,'item')]";
	private String idTemplate = advTemplate;
	private String headerTemplate = "//div[@class='it_header']";
	private String bodyTemplate =  "//div[@class='it_message']";
	private Portal portal;
	// локаторы полей объявления
	private String advPhoneLoc = "//span[@class='it_name']//ul/li//a";
	private String advAgencyNameLoc = "//span[@class='ad_name']/noindex";
	private String advRoomsNumberLoc = "//table[@class='pricetable']/tbody/tr//td[contains(@class,'ntype')]";
	private String advPriceLoc =  "//table[@class='pricetable']/tbody/tr//td[contains(@class,'nprice')]";
	private String advViewsLoc =  "//div[@class='pabuse']/noindex";
	private String advCreationDateLoc =  "//div[@class='it_date']";

	//структурные элементы объявления
	private static List<WebElement> advsBody;

	/**
	 * Базовый конструктор
	 */
	public NeagentBy() {
		super(By.xpath("//div[@id='header']//a[contains(.,'Неагент')]"), "Неагент");
	}

	/**
	 * Возвращает список объявлений на странице
	 * @return список объявлений ArrayList
	 */
	public ArrayList<BaseAdvertisment> getListOfAdvs(){
		portal = Portal.NEAGENT_BY;
		ArrayList<BaseAdvertisment> resultList = getListOfAdvs(advTemplate, idTemplate, headerTemplate, bodyTemplate, portal);
		return resultList;
	}
	/**
	 * Возвращает список телефонов на странице
	 * @return ArrayList
	 */
	public ArrayList<String> getPhones(){
		init();
		ArrayList<String> returnList = new ArrayList<String>();
		for (WebElement el:advsBody){
			WebElement l = el.findElement(By.xpath("." + advPhoneLoc));
			WebElement k = l.findElement(By.xpath(".."));
			l.click();
			browser.sleep(500);
			
			returnList.add(k.getText());
		}
	return returnList;
	}

	/**
	 * Создает объекты для работы с объявлением и результатами
	 */
	private void init() {
		advsBody = browser.getDriver().findElements(By.xpath(advTemplate));
	}

	public ArrayList<String> getRooms() {
		//init();
		ArrayList<String> returnList = new ArrayList<String>();
		for (WebElement el:advsBody){
			WebElement tempEl = el.findElement(By.xpath("."+advRoomsNumberLoc));
			returnList.add(tempEl.getText());
		}
		return returnList;
	}
	
	public ArrayList<String> getAgNames() {
		ArrayList<String> returnList = new ArrayList<String>();
		for (WebElement el:advsBody){
			try {
				WebElement tempEl = el.findElement(By.xpath("."+advAgencyNameLoc));
				returnList.add(tempEl.getText());
			} catch (Exception e) {
				logger.info("Отсутствует название подателя для объявления c ID = "+ el.getAttribute("id"));
			}
		}
		return returnList;
	}
	
	public ArrayList<String> getPrice() {
		ArrayList<String> returnList = new ArrayList<String>();
		for (WebElement el:advsBody){
			WebElement tempEl = el.findElement(By.xpath("."+advPriceLoc));
			returnList.add(tempEl.getText());
		}
		return returnList;
	}
	
	public ArrayList<String> getViews() {
		ArrayList<String> returnList = new ArrayList<String>();
		for (WebElement el:advsBody){
			WebElement tempEl = el.findElement(By.xpath("."+advViewsLoc));
			String s = extractViews(tempEl.getText());
			returnList.add(s);
		}
		return returnList;
	}
	
	public ArrayList<String> getCreationDate() {
		ArrayList<String> returnList = new ArrayList<String>();
		for (WebElement el:advsBody){
			WebElement tempEl = el.findElement(By.xpath("."+advCreationDateLoc));
			String s = tempEl.getText();
			if (s.equalsIgnoreCase("")){
				s = CommonFunctions.getCurrentDate() +"-T-"+ getCurrentTime();
			}
			returnList.add(s);
		}
		return returnList;
	}
	private String extractViews(String text) {
		String s = text.substring(text.indexOf("Просмотров: ")+12, text.indexOf("| С"));
		return s.trim();
	}
}
